package com.jc.repository.shard.database;


import org.springframework.beans.factory.InitializingBean;

import javax.sql.DataSource;
import java.io.File;
import java.io.PrintWriter;
import java.net.URL;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.SQLFeatureNotSupportedException;
import java.util.logging.Logger;

public class OceanusDataSource implements DataSource,InitializingBean{

    private DataSource datasource;

    @Override
    public void afterPropertiesSet() throws Exception {
        try {
            URL url = OceanusDataSource.class.getClassLoader().getResource("configurations_demo.xml");
            File file = new File(url.toURI());
            // 进程启动时要对 Oceanus 进行初始化
            //Oceanus.init(file.getAbsolutePath());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    public PrintWriter getLogWriter() throws SQLException {
        return datasource.getLogWriter();
    }

    @Override
    public void setLogWriter(PrintWriter out) throws SQLException {
        datasource.setLogWriter(out);
    }

    @Override
    public void setLoginTimeout(int seconds) throws SQLException {
        datasource.setLoginTimeout(seconds);
    }

    @Override
    public int getLoginTimeout() throws SQLException {
        return datasource.getLoginTimeout();
    }

    @Override
    public Logger getParentLogger() throws SQLFeatureNotSupportedException {
        return datasource.getParentLogger();
    }

    @Override
    public <T> T unwrap(Class<T> iface) throws SQLException {
        return datasource.unwrap(iface);
    }

    @Override
    public boolean isWrapperFor(Class<?> iface) throws SQLException {
        return datasource.isWrapperFor(iface);
    }

    @Override
    public Connection getConnection() throws SQLException {
        Connection connection = null;

        if(datasource != null)
            connection = datasource.getConnection();
        return null;
//		return new DelegateConnectionWrapper(connection, new ConnectionManager() {
//
//			@Override
//			public void release(Connection conn) {
//				try {
//					conn.close();
//				} catch (SQLException e) {
//					e.printStackTrace();
//				}
//			}
//
//		}, null);
    }

    /*
     * (non-Javadoc)
     *
     * @see javax.sql.DataSource#getConnection(java.lang.String,
     * java.lang.String)
     */
    @Override
    public Connection getConnection(String username, String password)
            throws SQLException {
        Connection connection = null;

        if(datasource != null)
            datasource.getConnection(username, password);

        return null;//new DelegateConnectionWrapper(connection,null);
    }

    public DataSource getDatasource() {
        return datasource;
    }

    public void setDatasource(DataSource datasource) {
        this.datasource = datasource;
    }

}

